import { Entity, PrimaryColumn, PrimaryGeneratedColumn, Column, BaseEntity, OneToMany, ManyToOne, JoinColumn, OneToOne } from 'typeorm';

@Entity({ name: 'member' })
export class ClsMember extends BaseEntity {
    // 用户ID
    // @PrimaryGeneratedColumn()
    // id: number;

    // 用户 id
    @PrimaryColumn({ length: 32, comment: '用户 ID' })
    userId: string;

    // 用户名
    @Column({ length: 20, comment: '用户名' })
    username: string;

    // 用户 id
    @Column({ length: 32, comment: '房间号' })
    classId: string;

    // 用户名
    @Column({ length: 20, comment: '房间名称' })
    classname: string;

    // 用户类型 member admin administrator
    @Column({ length: 24, comment: '用户类型' })
    @Column({
        type: String,
        nullable: true,
    })
    userType?: string | null;

    // 用户状态
    // @Column({ length: 24, comment: '用户状态' })
    // state?: string;

    // 客户端类型 'integer'
    // @Column()
    // clientType: number;

    // 创建时间
    @Column()
    createTime?: string;

    // 最后一次使用时间
    @Column()
    lastActiveTime?: string;
}

@Entity()
export class MediaConstraints extends BaseEntity {
    // 所属房间
    @OneToOne((type) => Classroom, (media) => media.mediaConstraints)
    @PrimaryGeneratedColumn()
    id: string;

    // 是否开启视频
    @Column()
    video: string;

    // 是否开启音频
    @Column()
    audio: string;

    // 创建时间
    @Column()
    createTime: string;

    // 最后一次使用时间
    @Column()
    lastActiveTime: string;
}

@Entity({ name: 'classroom' })
export class Classroom extends BaseEntity {
    // 房间 id
    @PrimaryColumn()
    classId: string;

    // 房间名称
    @Column()
    classname: string;

    // 创建者
    @Column()
    creator: string;

    // 房间类型
    @Column()
    classType: string;

    // 房间说话模式
    @Column()
    conferenceMode: string;

    // 群邀请别人加入的模式： # 主动拉人时验证
    @Column()
    inviteMode: string;

    // 群加入方式： # 别人主动加入时验证
    @Column()
    joinMode: string;

    // 聊天类型
    @Column()
    chatMode: string;

    // 房间描述
    @Column("text")
    description: string;

    // 创建时间
    @Column()
    createTime: string;

    // 最后一次使用时间
    @Column()
    lastActiveTime: string;

    @OneToOne((type) => MediaConstraints, (media) => media.id, {
        cascade: ["insert"],
    })
    @JoinColumn()
    mediaConstraints: MediaConstraints
    // 演讲者
    // @Column()
    // speaker: string;

    // 参与者
    // @Column()
    // attendee: string;
}

